/*
 *@description:编辑界面
 *@author: donghang
 *@date: 2019-08-27 10:23:49
 *@version: V1.0.0
 *@modify：2020.4.13，修改url定义方式，增加默认url，整理代码中方法排列顺序by zhanglongfei
 *必填数据：
 param1：
    urlPrefix：模块url前缀，前后带/，如/cbo/user/
  param2:
    moduleTitle: '模块名称',  //打开编辑框动态设置对话框名称
 选填数据：
 addRules:如果增加校验规则，文件中添加addRules
*/
/** API方法 */
import { getAction, putAction, postAction } from '@tapui/utils/http'
// import { validateIntGteZero } from '../utils/validateRule'
import { validateIntGteZero } from '../utils/validateRule'
import { mixin_base } from '@tapui/mixins/mixin_base'
/** 组件定义 */
export const mixin_edit = {
  mixins: [mixin_base],
  /** 组件数据 */
  data() {
    return {
      // 模块url前缀，前后带/，如/cbo/user/
      urlPrefix: '',
      // 默认url
      urlDefault: {},
      // 当前页面需要的url
      url: {},
      baseRules: {
        validateRequire: [
          // 必填
          { required: 'true', message: '请输入内容', trigger: 'change' }
        ],
        validateIntGteZero: [
          // 正整形校验
          { validator: validateIntGteZero }
        ],
        validateNumber: [
          // 数字校验
          { type: 'number', message: '请输入数字', trigger: 'change' }
        ]
      },
      // 遮幕
      saveLoading: false,
      // 模块名称
      moduleName: '',
      // 编辑界面可见
      visible: false,
      // 是否添加
      isAdd: false,
      // 窗口标题
      title: '',
      // 编辑按钮是否可见
      disableEditSubmit: false,
      // 数据主键
      id: '',
      // 数据
      model: {},
      // 编码列表
      codeModel: {},
      // 是否在新增页面打开前，查询初始化数据
      isQueryInitData: false,
      // 单据唯一标识
      uid: ''
    }
  },
  /** 计算 */
  computed: {
    rules: function() {
      if (typeof this.addRules === 'undefined') {
        return this.baseRules
      } else {
        Object.assign(this.baseRules, this.addRules)
        return this.baseRules
      }
    }
  },
  /** 组件方法 */
  methods: {
    /** 合并子页面自定义url和默认url */
    initMergeUrl() {
      let urlBase = { queryUid: 'api/uidGenerator/createUid' }
      if (this.urlPrefix) {
        urlBase = {
          ...urlBase,
          add: this.urlPrefix + 'insert',
          edit: this.urlPrefix + 'update',
          load: this.urlPrefix + 'load',
          queryCodeList: this.urlPrefix + 'dataCodeList',
          queryInitData: this.urlPrefix + 'queryInitData'
        }
      }
      this.url = { ...urlBase, ...this.urlDefault, ...this.url }
    },
    /** 页面打开时执行 - zhanglongfei 2019.10.18 */
    open() {
      this.model = {}
      this.$nextTick(() => {
        this.$refs.form.clearValidate()
        if (this.isAdd === true) {
          this.title = '添加' + this.moduleTitle
          // 需要添加重复判断
          if (this.$store.getters.param.isAvoidRepeat === true) {
            this.queryBillUid()
          }
          if (this.isQueryInitData === true) {
            // 后台进行数据初始化
            this.queryInitData().then((_) => {
              this.assignDefaultValue()
              this.$refs.form.clearValidate()
              this.loaded()
            })
          } else {
            // 前台进行数据初始化
            this.$set(this.model, 'enabled', 1)
            this.$set(this.model, 'sortcode', 0)
            this.assignDefaultValue()
            this.$refs.form.clearValidate()
            this.loaded()
          }
        } else if (this.disableEditSubmit === false) {
          this.title = '编辑' + this.moduleTitle
          this.queryData(this.id).then((_) => {
            this.loaded()
          })
        } else {
          this.title = '查看' + this.moduleTitle
          this.queryData(this.id).then((_) => {
            this.$refs.form.clearValidate()
            this.loaded()
          })
        }
      })
    },
    /** 预留方法 -- 设置默认值 - zhanglongfei 2019.10.16 */
    assignDefaultValue() {},
    /** 预留方法 -- 显示编辑页面时执行 - zhanglongfei 2019.10.16 */
    loaded() {},
    /** 编辑，发请求获得数据 */
    queryData(id) {
      if (!this.url.load) {
        this.$tap.alert('请设置load地址!', 'warning')
        return
      }
      return getAction(this.url.load, { id: id }).then((res) => {
        if (res.success) {
          this.model = res.result
        } else {
          this.$tap.alert(res.message, 'warning')
        }
      })
    },
    /** 新增之前，查询初始化数据 */
    queryInitData() {
      if (!this.url.queryInitData) {
        this.$tap.alert('请设置queryInitData地址!', 'warning')
        return
      }
      return getAction(this.url.queryInitData, {}).then((res) => {
        if (res.success) {
          this.model = res.result
        } else {
          this.$tap.alert(res.message, 'warning')
        }
      })
    },
    /** 防重复提交查询唯一uuid */
    queryBillUid() {
      this.uid = ''
      if (!this.url.queryUid) {
        this.$tap.alert('请设置queryUid地址!', 'warning')
        return
      }
      getAction(this.url.queryUid, { idt: 0 }).then((res) => {
        if (res.success) {
          this.uid = res.result.billuid
        } else {
          this.$tap.alert(res.message, 'warning')
        }
      })
    },
    /** 查询编码 */
    doQueryCode() {
      if (this.url.queryCodeList) {
        getAction(this.url.queryCodeList, {}).then((res) => {
          if (res.success) {
            this.codeModel = res.result
          } else {
            this.$tap.alert(res.message, 'warning')
          }
        })
      }
    },
    /** 提交前执行 */
    beforeSubmit() {
      return true
    },
    /** 修改前执行 */
    dobeforeUpdate() {
    },
    /** 提交后执行 */
    afterSubmit() {},
    /** 保存确认 */
    doSubmitEdit() {
      if (!this.beforeSubmit()) {
        return
      }
      this.$refs.form.validate((valid) => {
        if (valid) {
          if (this.isAdd) {
            this.doAdd()
          } else {
            this.dobeforeUpdate()
            this.doEdit()
          }
        } else {
          return false
        }
      })
    },
    /** 执行新增提交 */
    doAdd() {
      this.saveLoading = true
      // 增加唯一单号
      postAction(this.url.add + '?billuid=' + this.uid, this.model)
        .then((res) => {
          if (res.success) {
            this.$tap.message('添加成功', 'success')
            this.model = res.result
            this.visible = false
            this.$emit('refresh')
          } else {
            this.$tap.alert(res.message, 'warning')
          }
          this.afterSubmit()
          this.saveLoading = false
        })
        .catch((err) => {
          this.saveLoading = false
        })
    },
    /** 执行编辑提交 */
    doEdit() {
      this.saveLoading = true
      putAction(this.url.edit, this.model)
        .then((res) => {
          if (res.success) {
            this.$tap.message(res.message, 'success')
            // this.visible = false
            this.$emit('refresh')
          } else {
            this.$tap.alert(res.message, 'warning')
          }
          this.afterSubmit()
          this.saveLoading = false
        })
        .catch((err) => {
          this.saveLoading = false
        })
    },
    /** 取消保存 */
    doCancelEdit() {
      this.visible = false
    },
    /** 页面关闭时执行 - zhanglongfei 2019.10.18 */
    close() {},
    /** 执行复制操作 */
    doCopy() {
      this.beforeCopy()
      this.$set(this.model, 'id', 0)
      this.afterCopy()
    },
    beforeCopy() {},
    afterCopy() {}
  },
  /** 组件创建 */
  created() {
    this.initMergeUrl()
    this.doQueryCode()
  }
}
